package main

import "fmt"

// 抽象的银行业务员
type AbstractBanker interface {
	DoBusi()
}

// 存款的业务员
type SaveBanker struct {
	// AbstractBanker
}

func (sb *SaveBanker) DoBusi() {
	fmt.Println("进行了 存款业务...")
}

// +++++++++++++++++++++++++++
// 转账的业务员
type TransferBanker struct {
	// AbstractBanker
}

func (sb *TransferBanker) DoBusi() {
	fmt.Println("进行了 转帐业务...")
}

//	+++++++++++++++++++++++++
//
// 股票的业务员
type SharesBanker struct {
	// AbstractBanker
}

func (sb *SharesBanker) DoBusi() {
	fmt.Println("进行了 股票业务...")
}

// 实现一个架构层（基于抽象层进行业务封装-针对interface接口进行封装
func BankBusiness(banker AbstractBanker) {
	banker.DoBusi()
}

// 逻辑层
func main() {

	// 存款的业务
	sb := SaveBanker{}
	sb.DoBusi()

	// 转账的业务
	st := TransferBanker{}
	st.DoBusi()

	// 股票的业务
	ss := SharesBanker{}
	ss.DoBusi()

	// 架构层
	fmt.Println("======================")

	// 存款的业务
	BankBusiness(&SaveBanker{})
	// 转账的业务
	BankBusiness(&TransferBanker{})
	// 股票的业务
	BankBusiness(&SharesBanker{})

}
